package com.kj.tms.common.utils.calx.util;

import java.util.ArrayList;
import java.util.List;

/**
 * @ProjectName: ledger
 * @Package: com.hongtu.tms.ledger.calx.factory
 * @ClassName: Rules
 * @Description: [公式匹配文法规则]
 * @Author: [zhuyongjie]
 * @CreateDate: 2018/4/12 10:21
 * @UpdateUser: []
 * @UpdateDate: 2018/4/12 10:21
 * @UpdateRemark: []
 * @Version: 1.0
 * Copyright: 北京宏图天安 Copyright (c) 2018
 */
public class Rules {
    private List<String> rules;

    public Rules() {
        rules = new ArrayList<String>();
        initRules();
    }

    private void initRules() {
       /* //0:匹配一个或多个空格开头的空格
        rules.add("/^(?:\\s+)/");
        //1:匹配双引号开始的文本
        rules.add("/^(?:\"(\\\\[\"]|[^\"])*\")/");
        //2:匹配单引号开始的文本
        rules.add("/^(?:'(\\\\[']|[^'])*')/");
        //3:#A2_
        rules.add("/^(?:#[A-Za-z0-9_]+)/");
        //4:sum321(a3:a4)匹配sum321
        rules.add("/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))/");
        //5:匹配hh:mm:ss[AM|am|aM|Am|PM|pm|pM|Pm]时间格式
        rules.add("/^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))/");
        //6:匹配hh:mm:ss时间格式
        rules.add("/^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)/");
        //7:匹配$A$6形式单元格
        rules.add("/^(?:\\$[A-Za-z]+\\$[0-9]+)/");
        //8:匹配B1形式单元格
        rules.add("/^(?:[A-Za-z]+[0-9]+)/");
        //9:匹配A:C列运算
        rules.add("/^(?:[A-Za-z]+[:][A-Za-z]+)/");
        //10:sum(a3:a4)匹配sum
        rules.add("/^(?:[A-Za-z]+(?=[(]))/");
        //11:匹配A_1形式单元格或A列
        rules.add("/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/");
        //12:匹配A_列或_下划线
        rules.add("/^(?:[A-Za-z_]+)/");
        //13:匹配数字开头的所有数字
        rules.add("/^(?:[0-9]+)/");
        //14:匹配开头$符号
        rules.add("/^(?:\\$)/");
        //15:匹配开头第一个空格
        rules.add("/^(?: )/");
        //16:匹配开头小数点
        rules.add("/^(?:[.])/");
        //17:匹配开头冒号
        rules.add("/^(?::)/");
        //18:匹配开头分号
        rules.add("/^(?:;)/");
        //19:匹配开头逗号
        rules.add("/^(?:,)/");
        //20:匹配开头星号
        rules.add("/^(?:\\*)/");
        //21:匹配开头斜杆
        rules.add("/^(?:\\/)/");
        //22:匹配开头减号
        rules.add("/^(?:-)/");
        //23:匹配开头加号
        rules.add("/^(?:\\+)/");
        //24:匹配开头乘方符号
        rules.add("/^(?:\\^)/");
        //25:匹配开头左括号
        rules.add("/^(?:\\()/");
        //26:匹配开头右括号
        rules.add("/^(?:\\))/");
        //27:匹配开头左中括号
        rules.add("/^(?:\\[)/");
        //28:匹配右中括号
        rules.add("/^(?:\\])/");
        //29:匹配开头大于符号
        rules.add("/^(?:>)/");
        //30:匹配开头小于符号
        rules.add("/^(?:<)/");
        //31:匹配NOT()中的NOT
        rules.add("/^(?:NOT\\b)/");
        //32:匹配PI圆周率
        rules.add("/^(?:PI\\b)/");
        //33:匹配E,科学计数法
        rules.add("/^(?:E\\b)/");
        //34:匹配TRUE
        rules.add("/^(?:TRUE\\b)/");
        //35:匹配FALSE
        rules.add("/^(?:FALSE\\b)/");
        //36:匹配NULL
        rules.add("/^(?:NULL\\b)/");
        //37:匹配开头双引号
        rules.add("/^(?:\")/");
        //38:匹配开头单引号
        rules.add("/^(?:')/");
        //39:匹配开头感叹号
        rules.add("/^(?:!)/");
        //40:匹配开头等于号
        rules.add("/^(?:=)/");
        //41:匹配开头百分号
        rules.add("/^(?:%)/");
        //42:匹配#号
        rules.add("/^(?:[#])/");
        //43:匹配&符号
        rules.add("/^(?:[&])/");
        //44:匹配空文本
        rules.add("/^(?:$)/");*/


        //0:匹配一个或多个空格开头的空格
        rules.add("^(?:\\s+)");
        //1:匹配双引号开始的文本
        rules.add("^(?:\"(\\\\[\"]|[^\"])*\")");
        //2:匹配单引号开始的文本
        rules.add("^(?:'(\\\\[']|[^'])*')");
        //3:#A2_
        rules.add("^(?:#[A-Za-z0-9_]+)");
        //4:sum321(a3:a4)匹配sum321
        rules.add("^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))");
        //5:匹配hh:mm:ss[AM|am|aM|Am|PM|pm|pM|Pm]时间格式
        rules.add("^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))");
        //6:匹配hh:mm:ss时间格式
        rules.add("^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)");
        //7:匹配$A$6形式单元格
        rules.add("^(?:\\$[A-Za-z]+\\$[0-9]+)");
        //8:匹配B1形式单元格
        rules.add("^(?:[A-Za-z]+[0-9]+)");
        //9:匹配A:C列运算
        rules.add("^(?:[A-Za-z]+[:][A-Za-z]+)");
        //10:sum(a3:a4)匹配sum
        rules.add("^(?:[A-Za-z]+(?=[(]))");
        //11:匹配A_1形式单元格或A列
        rules.add("^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)");
        //12:匹配A_列或_下划线
        rules.add("^(?:[A-Za-z_]+)");
        //13:匹配数字开头的所有数字
        rules.add("^(?:[0-9]+)");
        //14:匹配开头$符号
        rules.add("^(?:\\$)");
        //15:匹配开头第一个空格
        rules.add("^(?: )");
        //16:匹配开头小数点
        rules.add("^(?:[.])");
        //17:匹配开头冒号
        rules.add("^(?::)");
        //18:匹配开头分号
        rules.add("^(?:;)");
        //19:匹配开头逗号
        rules.add("^(?:,)");
        //20:匹配开头星号
        rules.add("^(?:\\*)");
        //21:匹配开头斜杆
        rules.add("^(?:\\/)");
        //22:匹配开头减号
        rules.add("^(?:-)");
        //23:匹配开头加号
        rules.add("^(?:\\+)");
        //24:匹配开头乘方符号
        rules.add("^(?:\\^)");
        //25:匹配开头左括号
        rules.add("^(?:\\()");
        //26:匹配开头右括号
        rules.add("^(?:\\))");
        //27:匹配开头左中括号
        rules.add("^(?:\\[)");
        //28:匹配右中括号
        rules.add("^(?:\\])");
        //29:匹配开头大于符号
        rules.add("^(?:>)");
        //30:匹配开头小于符号
        rules.add("^(?:<)");
        //31:匹配NOT()中的NOT
        rules.add("^(?:NOT\\b)");
        //32:匹配PI圆周率
        rules.add("^(?:PI\\b)");
        //33:匹配E,科学计数法
        rules.add("^(?:E\\b)");
        //34:匹配TRUE
        rules.add("^(?:TRUE\\b)");
        //35:匹配FALSE
        rules.add("^(?:FALSE\\b)");
        //36:匹配NULL
        rules.add("^(?:NULL\\b)");
        //37:匹配开头双引号
        rules.add("^(?:\")");
        //38:匹配开头单引号
        rules.add("^(?:')");
        //39:匹配开头感叹号
        rules.add("^(?:!)");
        //40:匹配开头等于号
        rules.add("^(?:=)");
        //41:匹配开头百分号
        rules.add("^(?:%)");
        //42:匹配#号
        rules.add("^(?:[#])");
        //43:匹配&符号
        rules.add("^(?:[&])");
        //44:匹配空文本
        rules.add("^(?:$)");

    }

    public List<String> getRules() {
        return rules;
    }

    public void setRules(List<String> rules) {
        this.rules = rules;
    }
}
